package com.indexingsystem.boss.admin.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.indexingsystem.boss.Vo.InstitutionsInfoVo;
import com.indexingsystem.boss.Vo.InstitutionsListVo;
import com.indexingsystem.boss.Vo.InstitutionsVo;
import com.indexingsystem.boss.Vo.QueryInstitutionsVo;
import com.indexingsystem.boss.Vo.StatusList;
import com.indexingsystem.boss.Vo.TreeQueryVo;
import com.indexingsystem.boss.entity.Institutions;

public interface InstitutionsMapper {
	/**
	 * 通过机构id删除，单个操作.
	 * 
	 * @param institutionId
	 * @return
	 */
	int deleteByPrimaryKey(String institutionId);

	/**
	 * 批量删除机构信息操作.
	 * 
	 * @param institutionIdList
	 * @return
	 */
	int deleteInstitutionsByIdBatch(@Param("list") List<String> list);
	
	/**
	 * 获取已到期并且已禁用机构.
	 * @param institutionIdList
	 * @return
	 */
	List<InstitutionsInfoVo> getInstitutionsByValidDateIsDelte(@Param("list") List<String> list);

	/**
	 * 新增机构.
	 * 
	 * @param record
	 * @return
	 */
	int insert(Institutions record);

	/**
	 * 带条件新增机构.
	 * 
	 * @param record
	 * @return
	 */
	int insertSelective(Institutions record);

	/**
	 * 获取机构列表.
	 * 
	 * @return
	 */
	List<Institutions> selectInstitutionsList();

	/**
	 * 带条件查询机构列表.
	 * 
	 * @param institutionsCountVo
	 * @return
	 */
	List<QueryInstitutionsVo> selectInstitutionsCountList(InstitutionsVo institutionsCountVo);

	/**
	 * 查询子机构分页查询
	 * 
	 * @param institutionId
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	List<Institutions> selectSublevelInstitutionsList(TreeQueryVo treeQueryVo);

	/**
	 * 查询机构详情.
	 * 
	 * @param institutionId
	 * @return
	 */
	Institutions selectByPrimaryKey(String institutionId);

	/**
	 * 查询机构绑定用户列表.
	 * 
	 * @param institutionId
	 * @return
	 */
	List<InstitutionsVo>  selectBindUser(String institutionId);

	/**
	 * 修改机构信息.
	 * 
	 * @param record
	 * @return
	 */
	int updateByPrimaryKeySelective(Institutions record);

	/**
	 * 修改机构信息.
	 * 
	 * @param record
	 * @return
	 */
	int updateByPrimaryKey(Institutions record);

	/**
	 * 通过用户id查询关联机构信息.
	 * 
	 * @param userId
	 * @return
	 */
	List<Institutions> getInstitutionsListByUserId(String userId);

	/**
	 * 获取机构分页总数.
	 * 
	 * @return
	 */
	Integer getInstitutionsCount();

	/**
	 * 通过父级机构id查询所有子机构列表信息.
	 * 
	 * @param institutionId
	 * @return
	 */
	List<Institutions> getSublevelInstitutionsList(String institutionId);

	/**
	 * 获取子机构总数.
	 * 
	 * @param institutionId
	 * @return
	 */
	Integer getSublevelInstitutionsListSize(TreeQueryVo treeQueryVo);

	/**
	 * 通过机构名称查询机构信息.
	 * 
	 * @param institutionName
	 * @return
	 */
	Institutions selectInstitutionsByName(String institutionName);

	/**
	 * 获取机构名列表
	 * 
	 * @return
	 */
	List<InstitutionsListVo> getInstitutionsList();

	/**
	 * 批量启用，禁用机构.
	 * 
	 * @param statusList
	 * @return
	 */
	int batchUpdateInstitutionsWithMap(@Param("list") List<StatusList> list);

	/**
	 * 通过机构id查询所属机构信息.
	 * 
	 * @param institutionId
	 * @return
	 */
	InstitutionsInfoVo getParentInstitutionsById(String institutionId);
	
	/**
	 * 判断机构Id是否存在
	 * @param institutionId
	 * @return
	 */
	String getInstitutionsId(String institutionId);
	/**
	 * 通过用户id查询所属机构
	 * @param userId
	 * @return
	 */
	Institutions getInstitutionsById(String userId);
	

    /**
     * 通过机构id查询子级、所有子级、遍历至最上级根目录Tree机构树形.
     * 
     * @param institutionId
     * @return
     */
    List<Institutions> getPublishInstitutionsTreeList(String institutionId);
    
    
    /**
     * 通过父级机构id获取子级最大的到期日期.
     * @param id
     * @return
     */
    String getSublevelInstitutionsMaxVaildDate(String id);
}